package com.gin.pixiv.api

import com.gin.pixiv.enums.MatchMode
import com.gin.pixiv.enums.PixivOrder
import com.gin.pixiv.enums.SearchMode
import com.gin.pixiv.enums.SearchType
import com.gin.pixiv.param.IllustLikeParam
import com.gin.pixiv.response.PixivResponse
import com.gin.pixiv.response.bookmark.BookmarkDataBody
import com.gin.pixiv.response.common.DiscoveryBody
import com.gin.pixiv.response.common.FollowLatestBody
import com.gin.pixiv.response.illustration.*
import com.gin.pixiv.response.recommend.RecommendBody
import com.gin.pixiv.response.recommend.RecommendInitBody
import retrofit2.Call
import retrofit2.http.*

/**
 * 插画相关API
 * [GET]：详情、关注作品、收藏状态、发现、推荐作品、搜索、动图数据
 * [POST]： 喜欢
 * @author bx002
 * @since 2024/2/18 11:38
 */
interface IllustrationApi {
    /**
     * 请求详情
     */
    @GET("ajax/illust/{pid}")
    fun getDetail(@Path("pid") pid: Long): Call<PixivResponse<IllustrationDetail>>

    /**
     * 查询绘画的收藏状态
     */
    @GET("ajax/illust/{pid}/bookmarkData")
    fun getBookmarkData(@Path("pid") pid: Long): Call<PixivResponse<BookmarkDataBody>>

    /**
     * 发现作品
     */
    @GET("ajax/discovery/artworks")
    fun getDiscovery(
        @Query("sampleIllustId") sampleIllustId: Long? = null,
        @Query("limit") limit: Int = 20,
        @Query("mode") mode: SearchMode? = SearchMode.all,
    ): Call<PixivResponse<DiscoveryBody>>

    /**
     * 获取关注作者最新作品
     */
    @GET("ajax/follow_latest/illust")
    fun getLatest(
        @Query("page") page: Int? = 1,
        @Query("mode") mode: SearchMode? = SearchMode.all,
    ): Call<PixivResponse<FollowLatestBody>>

    /**
     * 根据一个作品ID推荐其他作品
     */
    @GET("ajax/illust/{pid}/recommend/init")
    fun getRecommendInit(
        @Path("pid") pid: Long,
        @Query("limit") limit: Int? = 20,
    ): Call<PixivResponse<RecommendInitBody<SimpleIllustration>>>

    /**
     * 根据多个作品ID推荐其他作品
     */
    @GET("ajax/illust/recommend/illusts")
    fun getRecommends(@Query("illust_ids[]") pid: Set<Long>): Call<PixivResponse<RecommendBody<SimpleIllustration>>>

    /**
     * 搜索绘画
     */
    @GET("ajax/search/illustrations/{keywords}")
    fun getSearch(
        @Path("keywords")
        keywords: String,
        /**
         * 页码
         */
        @Query("p")
        page: Int? = 1,
        /**
         * 排序模式
         */
        @Query("order") order: PixivOrder? = PixivOrder.date_d,
        /**
         * 模式
         */
        @Query("mode") mode: SearchMode? = SearchMode.all,
        /**
         * 发布时间（起），以东九区为准，格式：yyyy-MM-dd
         */
        @Query("scd") dateStart: String? = null,
        /**
         * 发布时间（止），以东九区为准，格式：yyyy-MM-dd
         */
        @Query("ecd") dateEnd: String? = null,
        /**
         * 如果需要屏蔽AI作品，设置为1
         */
        @Query("ai_type") blockAi: Int? = null,
        /**
         * 匹配模式
         */
        @Query("s_mode") matchMode: MatchMode? = MatchMode.s_tag,
        /**
         * 搜索的作品类型
         */
        @Query("type") searchType: SearchType? = SearchType.all,
    ): Call<PixivResponse<IllustrationSearchBody>>


    /**
     * 查询动图的额外数据
     */
    @GET("ajax/illust/{pid}/ugoira_meta")
    fun getUgoiraMeta(@Path("pid") pid: Long): Call<PixivResponse<UgoiraMetaBody>>

    @POST("ajax/illusts/like")
    fun postLike(@Body illustLikeParam: IllustLikeParam): Call<PixivResponse<LikeBody>>
}